winsafe\mf\com_interfaces/
imftopologynode.rs1#![allow(non_camel_case_types, non_snake_case)]
2
3use crate::co;
4use crate::decl::*;
5use crate::mf::vts::*;
6use crate::ole::privs::*;
7use crate::prelude::*;
8
9com_interface! { IMFTopologyNode: "83cf873a-f6da-4bc8-823f-bacfd55dc430";
10 }
29
30impl mf_IMFAttributes for IMFTopologyNode {}
31impl mf_IMFTopologyNode for IMFTopologyNode {}
32
33pub trait mf_IMFTopologyNode: mf_IMFAttributes {
42 fn CloneFrom(&self, node: &impl mf_IMFTopologyNode) -> HrResult<()> {
45 ok_to_hrresult(unsafe { (vt::<IMFTopologyNodeVT>(self).CloneFrom)(self.ptr(), node.ptr()) })
46 }
47
48 fn ConnectOutput(
51 &self,
52 output_index: u32,
53 downstream_node: &impl mf_IMFTopologyNode,
54 input_index_on_downstream_node: u32,
55 ) -> HrResult<()> {
56 ok_to_hrresult(unsafe {
57 (vt::<IMFTopologyNodeVT>(self).ConnectOutput)(
58 self.ptr(),
59 output_index,
60 downstream_node.ptr(),
61 input_index_on_downstream_node,
62 )
63 })
64 }
65
66 #[must_use]
69 fn DisconnectOutput(&self, output_index: u32) -> HrResult<()> {
70 ok_to_hrresult(unsafe {
71 (vt::<IMFTopologyNodeVT>(self).DisconnectOutput)(self.ptr(), output_index)
72 })
73 }
74
75 #[must_use]
81 fn GetInput(&self, input_index: u32) -> HrResult<(IMFTopologyNode, u32)> {
82 let mut queried = unsafe { IMFTopologyNode::null() };
83 let mut output_index_downstream_node = 0u32;
84 ok_to_hrresult(unsafe {
85 (vt::<IMFTopologyNodeVT>(self).GetInput)(
86 self.ptr(),
87 input_index,
88 queried.as_mut(),
89 &mut output_index_downstream_node,
90 )
91 })
92 .map(|_| (queried, output_index_downstream_node))
93 }
94
95 #[must_use]
98 fn GetInputCount(&self) -> HrResult<u32> {
99 let mut c = 0u32;
100 ok_to_hrresult(unsafe { (vt::<IMFTopologyNodeVT>(self).GetInputCount)(self.ptr(), &mut c) })
101 .map(|_| c)
102 }
103
104 #[must_use]
107 fn GetNodeType(&self) -> HrResult<co::MF_TOPOLOGY> {
108 let mut ty = co::MF_TOPOLOGY::default();
109 ok_to_hrresult(unsafe {
110 (vt::<IMFTopologyNodeVT>(self).GetNodeType)(self.ptr(), ty.as_mut())
111 })
112 .map(|_| ty)
113 }
114
115 #[must_use]
118 fn GetObject<T>(&self) -> HrResult<T>
119 where
120 T: ole_IUnknown,
121 {
122 let mut queried = unsafe { T::null() };
123 ok_to_hrresult(unsafe {
124 (vt::<IMFTopologyNodeVT>(self).GetObject)(self.ptr(), queried.as_mut())
125 })
126 .map(|_| queried)
127 }
128
129 #[must_use]
135 fn GetOutput(&self, output_index: u32) -> HrResult<(IMFTopologyNode, u32)> {
136 let mut queried = unsafe { IMFTopologyNode::null() };
137 let mut input_index_downstream_node = 0u32;
138 ok_to_hrresult(unsafe {
139 (vt::<IMFTopologyNodeVT>(self).GetOutput)(
140 self.ptr(),
141 output_index,
142 queried.as_mut(),
143 &mut input_index_downstream_node,
144 )
145 })
146 .map(|_| (queried, input_index_downstream_node))
147 }
148
149 #[must_use]
152 fn GetOutputCount(&self) -> HrResult<u32> {
153 let mut c = 0u32;
154 ok_to_hrresult(unsafe {
155 (vt::<IMFTopologyNodeVT>(self).GetOutputCount)(self.ptr(), &mut c)
156 })
157 .map(|_| c)
158 }
159
160 #[must_use]
163 fn GetTopoNodeID(&self) -> HrResult<u64> {
164 let mut id = 0u64;
165 ok_to_hrresult(unsafe {
166 (vt::<IMFTopologyNodeVT>(self).GetTopoNodeID)(self.ptr(), &mut id)
167 })
168 .map(|_| id)
169 }
170
171 fn SetObject(&self, object: &impl ole_IUnknown) -> HrResult<()> {
174 ok_to_hrresult(unsafe {
175 (vt::<IMFTopologyNodeVT>(self).SetObject)(self.ptr(), object.ptr())
176 })
177 }
178
179 fn SetTopoNodeID(&self, topo_id: u64) -> HrResult<()> {
182 ok_to_hrresult(unsafe {
183 (vt::<IMFTopologyNodeVT>(self).SetTopoNodeID)(self.ptr(), topo_id)
184 })
185 }
186}